home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / answrbok / 6_10.lha / 6_10 / 6_10min.c < prev    next >
Text File  |  1993-08-08  |  725b  |  49 lines

  1. * Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  2. * The C++ Answer Book */
  3. * Tony Hansen */
  4. * All rights reserved. */
  5. *
  6.    Subtract u[1..n] - v[1..n] to form w[0..n]
  7.  
  8.    The Art of Computer Programming, volume 2
  9.    D. Knuth, Section 4.3.1, Algorithm S
  10. /
  11. include <lint.h>
  12.  
  13. INT operator-(LINT u, LINT v)
  14.  
  15.    LINT w;
  16.  
  17.    /*
  18. S1 [Initialize]
  19.     set j <- n
  20.     k <- 0
  21.    */
  22.    for (int j = 3, k = 0; ; )
  23. {
  24. /*
  25.     S2(a) [Subtract digits]
  26.     set w[j] <- (u[j] - v[j] + k) mod b
  27. */
  28. LINT_Ltype t = u.s[j];
  29. t -= v.s[j];
  30. t -= k;
  31. w.s[j] = t;    // % LINT_base
  32.  
  33. /*
  34.     S3 [Loop on j]
  35.     decrease j by one
  36. */
  37. if (--j < 0)
  38.     break;
  39.  
  40. /*
  41.     S2(b)
  42.     k <- (u[j] - v[j] + k) / b
  43. */
  44. k = (t / LINT_base) ? 1 : 0;
  45. }
  46.  
  47.    return w;
  48.  
  49.